package cn.dduan.fool.collection.set;

import java.util.LinkedHashSet;

/**
 * LinkedHashSet
 * <p>
 * 继承HashSet，本质是LinkedHashMap实现
 * 底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成。
 * 有序的，根据HashCode的值来决定元素的存储位置，同时使用一个链表来维护元素的插入顺序
 * 非线程安全，可以有null 值
 *
 * @author dduan
 * @version 1.0
 * @date 2023/3/28
 */
public class MyLinkedHashSet {
    public static void main(String[] args) {
        LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>();
        linkedHashSet.add(3);
        linkedHashSet.add(1);

        // 测试 LinkedHashSet 线程安全
        /*Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    linkedHashSet.add(i);
                }
            }
        });
        t1.start();

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    linkedHashSet.remove(i);
                }
            }
        });
        t2.start();*/

        System.out.println(linkedHashSet.toString());
    }
}
